package com.javabase.study.CollectionStuday;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * TODO
 * 内容：list特点和常用方法
 * 作者:jxx
 * 创建时间：2021/4/21
 * List是有序、可重复的容器。
 * 有序：List中每个元素都有索引标记。可以根据元素索引表及(在list中的位置)访问元素，从而
 *     精确控制这些元素。
 * 可重复：List允许加入重复的元素。更确切地讲，List通常允许满足e1.equals(e2)的元素重复
 *     加入容器。
 * 除了Collection接口中的方法，List多了一些跟顺序(索引有关的方法)，参见如下：
 *          方法                                            说明
 *  void add(int index,Ojbect element)         在指定位置插入，此前在此位置及后面的元素全部后移一位
 *  Ojbect set(int index,Ojbect element)       修改指定位置的元素
 *  Object get(int index)                      获取指定位置的元素
 *  Object remove(int Index)                   删除指定位置的元素，后面的元素全部前移一位
 *  int indexOf(Object o)                      返回第一个匹配元素的索引，如果没有匹配到，则返回 -1
 *  int lastIndexOf(Object o)                  返回最后一个匹配元素的索引，如果没有该元素，返回-1
 *
 * List接口常用的实现类有3个：ArrayList、LinkedList和Vector
 */
public class TestList {
    public static void main(String[] args){
        TestList testList = new TestList();
        //testList.listElementOperationPractice();
        //testList.testTwoListOperation();
        testList.testListIndexOperation();
    }
    /*
     *测试 list的常用方法
     * add          添加一个元素
     * remove       移除一个元素
     * size         集合元素数量
     * isEmpty      是否为空集合
     * contains     是否包含指定元素
     * clear        清空集合
     * toArrays     将list集合转化成数组
     */
    protected void listElementOperationPractice(){
        List<String> list = new ArrayList<String>();
        System.out.println(list.isEmpty());//判断是否为空集合
        list.add("蒋星星");//给集合添加元素
        System.out.println(list.isEmpty());
        list.add("高杨");
        list.add("是真波");
        System.out.println(list);
        System.out.println(list.size());//集合元素的数量
        System.out.println("list是否包含指定元素：" + list.contains("高杨"));//是否包含指定元素
        list.remove("是真波");//移除元素
        System.out.println(list);
        Object[] objs = list.toArray();//list转数组
        System.out.println("转化成Object数组：" + Arrays.toString(objs));
        list.clear();//清空集合
        System.out.println("清空所有元素:" + list);


    }
    /*
     * containsAll()
     * addAll()
     * retainAll()
     */
    protected void testTwoListOperation(){
        List<String> list = new ArrayList<>();
        list.add("蒋兴兴");
        list.add("蒋星星");
        list.add("高杨");

        List<String> list2 = new ArrayList<>();
        list2.add("高杨");
        list2.add("张三");
        list2.add("李四");

        System.out.println(list.containsAll(list2));
        System.out.println(list);
        list.addAll(list2);
        System.out.println(list);
        list.removeAll(list2);
        System.out.println(list);
        list.retainAll(list2);
        System.out.println(list);
    }
    /*
     * 测试List中关于索引的操作方法
     */
    protected void testListIndexOperation(){
        List<String> list = new ArrayList<>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");

        System.out.println(list);
        list.add(2,"高");
        System.out.println(list);
        list.remove(2);
        System.out.println(list);
        list.set(2,"c");
        System.out.println(list);
        System.out.println(list.get(1));
        list.add("B");
        System.out.println(list);

        System.out.println(list.indexOf("B"));
        System.out.println(list.lastIndexOf("B"));

    }
}
